//*******************************************************************
//	created:	23:4:2011   21:32
//	filename: 	logmanager.h
//	author:		tiamo
//	purpose:	log manager
//*******************************************************************

#pragma once

namespace utils
{
	//
	// log manager
	//
	class LogManager
	{
	public:
		//
		// log level
		//
		enum
		{
			LevelDebug,
			LevelInfo,
			LevelWarning,
			LevelError,
		};

	public:
		//
		// constructor
		//
		LogManager();

		//
		// destructor
		//
		~LogManager();

		//
		// initialize
		//
		void initialize(wchar_t const* fileNameBase, uint32_t logLevel, bool useSysLog);

		//
		// log message
		//
		void logMessage(uint32_t logLevel, wchar_t const* format, ...) throw ();

	private:
		//
		// log file
		//
		StdioFile															mLogFile;

		//
		// last log time
		//
		tm																	mLastLogTime;

		//
		// file name base
		//
		UniString															mLogFileNameBase;

		//
		// log level
		//
		uint32_t															mLogLevel;

		//
		// use syslog
		//
		bool																mSyslog;

		//
		// mutex
		//
		utils::Mutex															mMutex;
	};
}
